import { EzFormControl } from '../ez-form-control';
import { EzFormGroup, EzFormGroupConfiguration } from '../ez-form-group';
/**
 * 表单对象接口
 */
export interface EzForm {
  /**
   * 获取表单控件
   * @param name 表单控件名称
   */
  getControl<C extends EzFormControl = EzFormControl>(name: string): C;

  /**
   * 判断是否包含表单控件
   * @param name 表单控件名称
   */
  containsControl(name: string): boolean;

  /**
   * 删除表单控件
   * @param name 表单控件名称
   */
  removeControl(name: string): void;

  /**
   * 禁用控件
   * @param names 被禁用的表单控件名称
   */
  disableControls(names?: string | string[]): void;

  /**
   * 启用控件
   * @param names 被禁用的表单控件名称
   */
  enableControls(names?: string | string[]): void;

  /**
   * 获取表单控件组
   * @param name 表单控件组名称
   */
  getGroup(name: string): EzFormGroup;

  /**
   * 获取所有表单控件组
   */
  groups(): { [name: string]: EzFormGroup };

  /**
   * 删除表单控件组
   * @param name 表单控件组名称
   */
  removeGroup(name: string): void;

  /**
   * 添加表单控件组
   * @param configuration 表单控件组配置信息
   * @param index 插入在表单组位置，默认追加在最后面
   */
  addGroup(configuration: EzFormGroupConfiguration, index?: number): void;

  /**
   * 禁用控件组（不传参数则禁用所有控件组）
   * @param names 被禁用的表单控件组名称
   */
  disableGroups(names?: string | string[]): void;

  /**
   * 启用控组（不传参数则启用所有控件组）
   * @param names 被禁用的表单控件组名称
   */
  enableGroups(names?: string | string[]): void;

  /**
   * 重置表单
   */
  reset(): void;

  /**
   * 获取表单值
   */
  getValue(): { [name: string]: any };

  /**
   * 校验表单
   */
  validate(): void;

  /**
   * 判断表单是否校验通过
   */
  isValid(): boolean;
}
